/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package espe.ccsoft.controllers;

import espe.ccsoft.controllers.utils.JsfUtil;
import espe.ccsoft.controllers.utils.PaginationHelper;
import espe.ccsoft.controllers.utils.Validaciones;
import espe.ccsoft.dao.AyudanteDao;
import espe.ccsoft.controllers.utils.Mensajes;
import espe.ccsoft.models.Ayudante;
import espe.ccsoft.models.Socio;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.IOException;
import java.sql.SQLException;
import java.util.ResourceBundle;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.context.FacesContext;
import javax.faces.event.PhaseId;
import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;
import javax.mail.Message;
import javax.servlet.ServletContext;
import org.primefaces.model.DefaultStreamedContent;
import org.primefaces.model.StreamedContent;

/**
 *
 * @author Carlos
 */
@ManagedBean
@RequestScoped
public class AyudanteController {

    private File file;
    private Ayudante ayudante;
    private PaginationHelper pagination;
    private AyudanteDao ayudanteDao;
    private int selectedItemIndex;
    private DataModel items = null;
    String realPath = "";
    Mensajes mensaje;
    Validaciones validaciones;

    public AyudanteController() {
        mensaje = new Mensajes();
        validaciones = new Validaciones();
    }

    public Ayudante getSelected() {
        if (ayudante == null) {
            ayudante = new Ayudante();
            selectedItemIndex = -1;
        }
        return ayudante;
    }

    public AyudanteDao getAyudanteDao() {
        ayudanteDao = new AyudanteDao();
        return ayudanteDao;
    }

    public byte[] cargarImagen(Ayudante ayudante) throws IOException {
        try {
            byte[] data = ayudante.getFoto().getBytes(1, (int) ayudante.getFoto().length());
            return data;
        } catch (SQLException ex) {
            Logger.getLogger(Socio.class.getName()).log(Level.SEVERE, null, ex);
        }
        return null;
    }

    public StreamedContent getImage() throws IOException, Exception {
        FacesContext context = FacesContext.getCurrentInstance();

        if (context.getCurrentPhaseId() == PhaseId.RENDER_RESPONSE) {
            return new DefaultStreamedContent();
        } else {
            String ayudante_id = context.getExternalContext().getRequestParameterMap().get("ayudanteId");
            Ayudante ayudanteTmp = getAyudanteDao().findByPK(Integer.parseInt(ayudante_id));
            return new DefaultStreamedContent(new ByteArrayInputStream(cargarImagen(ayudanteTmp)));
        }
    }

    public final String crearAyudante() throws Exception {

        //Validaciones
        if (!validaciones.validarCedula(ayudante.getRuc())) {
            mensaje.addMessageSuccefull("Cédula incorrecta!", "Por favor ingrese una cédula correcta.");
            return null;
        }

        if (!ayudante.getEmail().equals("")) {
            if (!validaciones.validateEmail(ayudante.getEmail())) {
                mensaje.addMessageSuccefull("Email incorrecto!", "Por favor ingrese una email correcto.");
                return null;
            }
        }

        //Permite Obtener la Ruta real de la imagen SinFoto
        ServletContext servletContext = (ServletContext) FacesContext.getCurrentInstance().getExternalContext().getContext();
        realPath = (String) servletContext.getRealPath("/img/sinFoto.jpg");

        //Creacion del ayudante
        AyudanteDao dao = new AyudanteDao();
        Ayudante ayudanteTmp = dao.findByRUC(ayudante.getRuc());
        ayudante.setRutaFoto(realPath);
        try {
            if (ayudanteTmp == null) {
                dao.insert(ayudante);
                mensaje.addMessageSuccefull("Registro exitoso!", "El ayudante fue registrado correctamente.");
                
                return "Index";
            } else {
                mensaje.addMessageError("Registro fallido!", "El ayudante ya se encuentra registrado.");
                return null;
            }
        } catch (Exception e) {
            return "/Error";
        }
    }

    public String modificarAyudante() throws Exception {
        AyudanteDao dao = new AyudanteDao();
        dao.update(ayudante);
        mensaje.addMessageSuccefull("Modificación exitosa!", "Ayudante modificado con éxito.");        
        return "Index";
    }

    public DataModel getItems() {
        if (items == null) {
            items = getPagination().createPageDataModel();
        }
        return items;
    }

    public PaginationHelper getPagination() {
        if (pagination == null) {
            pagination = new PaginationHelper(10) {

                @Override
                public int getItemsCount() {
                    try {
                        return getAyudanteDao().findAll().size();
                    } catch (Exception ex) {
                        return 0;
                    }
                }

                @Override
                public DataModel createPageDataModel() {
                    try {
                        return new ListDataModel(getAyudanteDao().findAll());
                    } catch (Exception ex) {
                        return new ListDataModel();
                    }
                }
            };
        }
        return pagination;
    }

    public final String cargarCrearAyudante() {
        ayudante = new Ayudante();
        selectedItemIndex = -1;
        return "Crear";
    }

    public final String cargarModificarDetalleAyudante(int id_ayudante) throws Exception {
        ayudante = getAyudanteDao().findByPK(id_ayudante);
        return "Modificar";
    }

    public final String cargarDetalleModificarAyudante(int id_ayudante) throws Exception {
        ayudante = getAyudanteDao().findByPK(id_ayudante);
        return "Detalle";
    }

}
